{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Mean encoding\n",
    "\n",
    "In the previous lectures in this section on how to engineer the labels of categorical variables, we learnt how to convert a label into a number, by using one hot encoding or replacing by frequency or counts. These methods are simple, make no assumptions and work generally well in different scenarios.\n",
    "\n",
    "There are however methods that allow us to capture information while pre-processing the labels of categorical variables. These methods include:\n",
    "\n",
    "- Ordering the labels according to the target\n",
    "- Replacing labels by the risk (of the target)\n",
    "- Replacing the labels by the joint probability of the target being 1 or 0\n",
    "- Weight of evidence.\n",
    "\n",
    "### Monotonicity\n",
    "\n",
    "All these methods create a monotonic relationship between the categorical variable and the target. A monotonic relationship is a relationship that does one of the following: (1) as the value of one variable increases, so does the value of the other variable; or (2) as the value of one variable increases, the other variable value decreases. In this case, as the value of the independent variable (predictor) increases, so does the target, or conversely, as the value of the variable increases, the target decreases.\n",
    "\n",
    "In general:\n",
    "\n",
    "### Advantages\n",
    "\n",
    "- Capture information within the label, therefore rendering more predictive features\n",
    "- Creates a monotonic relationship between the variable and the target\n",
    "- Does not expand the feature space\n",
    "\n",
    "### Disadvantage\n",
    "\n",
    "- Prone to cause over-fitting\n",
    "\n",
    "\n",
    "### Note\n",
    "\n",
    "The methods discussed in this and the coming 3 lectures can be also used on numerical variables, after discretisation. This creates a monotonic relationship between the numerical variable and the target, and therefore improves the performance of linear models. I will discuss this in more detail in the section \"Discretisation\".\n",
    "\n",
    "\n",
    "### Replace labels by the Risk Factor\n",
    "\n",
    "Replacing labels by the risk factor means essentially replacing the label by the mean of the target for that label. \n",
    "\n",
    "I have only seen this procedure applied in classifications scenarios, where the target can take just the values of 1 or 0. However, in principle, I don't see why this shouldn't be possible as well when the target is continuous. Just be mindful of over-fitting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Cabin</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>C85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>C123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived Cabin\n",
       "0         0   NaN\n",
       "1         1   C85\n",
       "2         1   NaN\n",
       "3         1  C123\n",
       "4         0   NaN"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's load again the titanic dataset\n",
    "\n",
    "data = pd.read_csv('titanic.csv', usecols=['Cabin', 'Survived'])\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Cabin</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>Missing</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>C85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>Missing</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>C123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>Missing</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived    Cabin\n",
       "0         0  Missing\n",
       "1         1      C85\n",
       "2         1  Missing\n",
       "3         1     C123\n",
       "4         0  Missing"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's first fill NA values with an additional label\n",
    "\n",
    "data.Cabin.fillna('Missing', inplace=True)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "148"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Cabin has indeed a lot of labels, here for simplicity, I will capture the first letter of the cabin, \n",
    "# but the procedure could be done as well without any prior variable manipulation\n",
    "\n",
    "len(data.Cabin.unique()) # check number of different labels in Cabin"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Cabin</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>M</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>M</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>M</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived Cabin\n",
       "0         0     M\n",
       "1         1     C\n",
       "2         1     M\n",
       "3         1     C\n",
       "4         0     M"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Now we extract the first letter of the cabin\n",
    "\n",
    "data['Cabin'] = data['Cabin'].astype(str).str[0]\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['M', 'C', 'E', 'G', 'D', 'A', 'B', 'F', 'T'], dtype=object)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check the labels\n",
    "data.Cabin.unique()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Important\n",
    "\n",
    "The risk factor should be calculated per label considering ONLY on the training set, and then expanded it to the test set.\n",
    "See below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((623, 2), (268, 2))"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Let's separate into training and testing set\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(data[['Cabin', 'Survived']], data.Survived, test_size=0.3,\n",
    "                                                    random_state=0)\n",
    "X_train.shape, X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Cabin\n",
       "A    0.428571\n",
       "B    0.774194\n",
       "C    0.571429\n",
       "D    0.692308\n",
       "E    0.740741\n",
       "F    0.666667\n",
       "G    0.500000\n",
       "M    0.303609\n",
       "T    0.000000\n",
       "Name: Survived, dtype: float64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's calculate the target frequency for each label\n",
    "\n",
    "X_train.groupby(['Cabin'])['Survived'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'A': 0.42857142857142855,\n",
       " 'B': 0.77419354838709675,\n",
       " 'C': 0.5714285714285714,\n",
       " 'D': 0.69230769230769229,\n",
       " 'E': 0.7407407407407407,\n",
       " 'F': 0.66666666666666663,\n",
       " 'G': 0.5,\n",
       " 'M': 0.30360934182590232,\n",
       " 'T': 0.0}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# and now let's do the same but capturing the result in a dictionary\n",
    "\n",
    "ordered_labels = X_train.groupby(['Cabin'])['Survived'].mean().to_dict()\n",
    "ordered_labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# replace the labels with the 'risk' (target frequency)\n",
    "# note that we calculated the frequencies based on the training set only\n",
    "\n",
    "X_train['Cabin_ordered'] = X_train.Cabin.map(ordered_labels)\n",
    "X_test['Cabin_ordered'] = X_test.Cabin.map(ordered_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Cabin_ordered</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>857</th>\n",
       "      <td>E</td>\n",
       "      <td>1</td>\n",
       "      <td>0.740741</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>D</td>\n",
       "      <td>1</td>\n",
       "      <td>0.692308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>386</th>\n",
       "      <td>M</td>\n",
       "      <td>0</td>\n",
       "      <td>0.303609</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>D</td>\n",
       "      <td>0</td>\n",
       "      <td>0.692308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>578</th>\n",
       "      <td>M</td>\n",
       "      <td>0</td>\n",
       "      <td>0.303609</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Cabin  Survived  Cabin_ordered\n",
       "857     E         1       0.740741\n",
       "52      D         1       0.692308\n",
       "386     M         0       0.303609\n",
       "124     D         0       0.692308\n",
       "578     M         0       0.303609"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check the results\n",
    "\n",
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0xcaecfce400>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nDQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xcaebf302e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the original variable\n",
    "\n",
    "fig = plt.figure()\n",
    "fig = X_train.groupby(['Cabin'])['Survived'].mean().plot()\n",
    "fig.set_title('Normal relationship between variable and target')\n",
    "fig.set_ylabel('Survived')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0xcaed3e6a20>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\npGCMMeao/wevlVRtNSW2mAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xcaed398dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the transformed result: the monotonic variable\n",
    "\n",
    "fig = plt.figure()\n",
    "fig = X_train.groupby(['Cabin_ordered'])['Survived'].mean().plot()\n",
    "fig.set_title('Monotonic relationship between variable and target')\n",
    "fig.set_ylabel('Survived')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here the relationship lies perfectly on a diagonal line, because this is how we replaced the categories. "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
